package com.demo.behavioral.command;

/**
 * 命令模式
 * 命令模式把一个请求或者操作封装到一个对象中，执行时并不知道接收请求的一方的接口、如何处理等细节，将接收请求的对象全部
 * 都放在了请求对象中，当然，请求对象看上去就是个重量级的bean
 * 应用场景调用者和接收者不直接交互,需要将一组操作组合在一起
 * 优点新的命令可以很容易地加入到系统中。
 * 实现方式：1、定义一个命令请求者类，可以调用命令接收类 2、定义一个命令接收接口及多个命令实现类，多个实现类均可以调用命令执行者类 
 * 3、定义一个命令执行者类
 * @author allen
 *
 */
public class Test {
	
	public static void main(String[] args) {
		//以美国总统下达各种命令为例，定义一个命令接收器，最终执行的是军队
		//先初始化，装配好各种对象，如spring配置一样
		Army army = new Army();
		AirBattleCommand airBattleCommand = new AirBattleCommand(army);
		LandBattleCommand landBattleCommand = new LandBattleCommand(army);
		NuclearMissileCommand nuclearMissileCommand = new NuclearMissileCommand(army);
		PresidentialArmyOrder presidentialArmyOrder = new PresidentialArmyOrder(airBattleCommand,
				landBattleCommand,nuclearMissileCommand); 
		//总统下达命令，军队执行命令，但总统与军队无耦合
		presidentialArmyOrder.startAirBattleWar();
		presidentialArmyOrder.startLandBattle();
		//如新增需求，则新增一实现Command接口的类，然后新增命令请求者类的方法即可
		presidentialArmyOrder.startNuclearWar();
		
	}

}
